package com.cs.beneficios.web.action;

import com.cs.beneficios.business.entity.AtributosDAO;
//import com.cs.beneficios.business.entity.BeneficiarioDAO;
import com.cs.beneficios.business.entity.BeneficioDAO;
//import com.cs.beneficios.business.entity.InterfazMELDAO;
import com.cs.beneficios.business.entity.ModificarBOTDAO;
//import com.cs.beneficios.business.entity.RenovarDAO;
//import com.cs.beneficios.business.entity.SedeDAO;
import com.cs.beneficios.business.entity.SubProgramaDAO;
import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.business.model.BeneficiarioVO;
//import com.cs.beneficios.business.model.InterfazMELVO;
import com.cs.beneficios.business.model.ModificarBOTVO;
//import com.cs.beneficios.business.model.RenovarVO;
import com.cs.beneficios.business.model.SubProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;

import com.cs.paoyer.administration.business.model.UserVO;

import java.io.IOException;

import java.sql.ResultSet;
import java.sql.SQLException;

import java.text.SimpleDateFormat;

import java.util.Calendar;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class ModificarBOTAction extends Action {
    /**This is the main action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form, 
                                 HttpServletRequest request, 
                                 HttpServletResponse response) throws IOException, 
                                                                      ServletException {
                                                                      
        //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
		ConnectionFactory cf = new ConnectionFactory();
        SubProgramaVO codigosub = new SubProgramaVO();
        SubProgramaDAO sub = new SubProgramaDAO(cf);
        
        HttpSession session = request.getSession();
        String strCodigoSubpro = (String)request.getAttribute("codbene");
        String strCodigoBeneficiario = (String)request.getAttribute("code");
        String strCodigoBOT = request.getParameter("codeBot");
        codigosub.setCode(new Long(strCodigoSubpro));
        
        //Proceso para la auditoria
         String terminalAddress = request.getRemoteAddr();
         String strTerminal = ("WEB="+terminalAddress);
         Calendar c = Calendar.getInstance(); 
         SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
        //Fin del proceso 

        BeneficiarioVO beneVO = new BeneficiarioVO();
        List coPropBeneficiario =  (List)session.getAttribute("beneSelected");
        List lAtributos = new LinkedList();

        //Proceso para convertir los atributos que no tienen valores en la lista
        try{
         AtributosDAO atriDAO = new AtributosDAO(cf);
         int conversion = atriDAO.getAtributosVallista(strCodigoSubpro);
         cf.closeConnection(atriDAO.getConn());
        }catch(SQLException e){
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSSPE - cwsub ********/");
        }

          UserVO user = (UserVO)session.getAttribute("userInfo");
          
          Collection atributos=null;
          //Collection Csedes = null;
          
          AtributosDAO objAtributoDAO;
          
          //SedeDAO objSedeDAO;
          session.setAttribute("beneficiario",strCodigoBeneficiario);
          try
          {
          
              /*List lNom = (List)sub.findSubProgramaByCriterea(codigosub,user.getCode(), user.getUserGroupName(),user.getCodeArea());
              cf.closeConnection(sub.getConn());
              
              codigosub = (SubProgramaVO)lNom.get(0);
              String strNombre = codigosub.getNombre();
              session.setAttribute("NombreSub",strNombre);*/
            
              objAtributoDAO = new AtributosDAO(cf);
              atributos = objAtributoDAO.GetAtributos(strCodigoSubpro,"A",0);
              cf.closeConnection(objAtributoDAO.getConn());
              
              int tam = atributos.size();
              String strTamano=String.valueOf(tam);
              
              session.setAttribute("tamanoLista",strTamano);
              session.setAttribute("ListaAtributos",atributos);
              
              /*objSedeDAO = new SedeDAO(cf);
              Csedes = objSedeDAO.GetTotalSedebyUser(user.getCode(),new Long(strCodigoSubpro),user.getUserGroupName(),user.getCodeArea());
              cf.closeConnection(objSedeDAO.getConn());
              if((Object)Csedes != null)
              {
                if(Csedes.size()>0){
                    session.setAttribute("ListaSede",Csedes);  
                } else {
                    session.removeAttribute("ListaSede");
                }
                  
              }*/
          
          // Proceso para calcular la edad
            beneVO =  (BeneficiarioVO)coPropBeneficiario.get(0);
            String strFechaNacimiento = beneVO.getFechaNacimiento();
            if(strFechaNacimiento != null && !strFechaNacimiento.equals(""))
            {
              AtributoVO objAtriVO = new AtributoVO();
              lAtributos = (List)atributos;
              if(atributos!= null && atributos.size()!= 0)
              {
                for(int i=0;i<lAtributos.size();i++)
                {
                  objAtriVO = (AtributoVO)lAtributos.get(i);
                  if((objAtriVO.getDescripcion()).equals("EDAD"))
                  {
                    Calendar calendario= Calendar.getInstance();
                    String strFechaActual=(calendario.get(Calendar.DAY_OF_MONTH)<10?"0":"")+calendario.get(Calendar.DAY_OF_MONTH)+"/"+
                                 ((calendario.get(Calendar.MONTH)+1)<10?"0":"")+(calendario.get(Calendar.MONTH)+1)+"/"+calendario.get(Calendar.YEAR);
                    
                    String ArrFechaActual[] = strFechaActual.split("/");
                    String strDayAc = ArrFechaActual[0];
                    String strMonthAc = ArrFechaActual[1];                       
                    String strYearAc = ArrFechaActual[2];
                    
                    String ArrFechaNacimiento[] = ((String)beneVO.getFechaNacimiento()).split("/");
                    String strDayNa = ArrFechaNacimiento[0];
                    String strMonthNa = ArrFechaNacimiento[1];                       
                    String strYearNa = ArrFechaNacimiento[2];
                    
                    //resto los a�os de las dos fechas 
                     int iEdad = Integer.parseInt(strYearAc) - Integer.parseInt(strYearNa) - 1; //-1 porque no se si ha cumplido a�os ya este a�o
                    
                    //si resto los meses y me da menor que 0 entonces no ha cumplido a�os. Si da mayor si ha cumplido 
                    if (((Integer.parseInt(strMonthAc)) - (Integer.parseInt(strMonthNa))) > 0)
                      iEdad +=1;
                    
                    if (((Integer.parseInt(strMonthAc)) - (Integer.parseInt(strMonthNa))) == 0)
                    {
                      //si resto los dias y me da menor que 0 entonces no ha cumplido a�os. Si da mayor o igual si ha cumplido 
                      if (((Integer.parseInt(strDayAc)) - (Integer.parseInt(strDayNa))) >= 0)
                         iEdad +=1;
                    }
                    
                    request.setAttribute("Edad",String.valueOf(iEdad));
                    session.setAttribute("DateBirth",(String)beneVO.getFechaNacimiento());
                  }
                }
                
              }
            }
            // Fin del proceso
          
          // proceso que traer el resto de la informacion
           ModificarBOTDAO objModificarBOT = new ModificarBOTDAO(cf);
           List latributos = (List)objModificarBOT.GetAtributosSubpro(strCodigoSubpro);
           List lResultados = new LinkedList();
           //String strSede = objModificarBOT.GetSedeOtorgamiento(strCodigoBOT);
           //session.setAttribute("codesede", strSede);
           String strSede = (String)session.getAttribute("codesede");
           for(int i=0;i<latributos.size();i++)
           {
             AtributoVO atrivo = new AtributoVO();
             atrivo = (AtributoVO)latributos.get(i);
             if(atrivo.getTipoatributo().equals("R"))
             {
               String strValor = objModificarBOT.Getbeneficiarioatri(atrivo.getTipodato(),strCodigoBeneficiario,atrivo.getCodatributo());
               ModificarBOTVO modifBOTVO = new ModificarBOTVO();
               if(strValor != null && !strValor.equals(""))
               {
                 modifBOTVO.setNombre(atrivo.getNombre());
                 modifBOTVO.setValorInicial(strValor);
                 modifBOTVO.setTipoatributo(atrivo.getTipoatributo());
                 lResultados.add(modifBOTVO);
                 modifBOTVO = null;
               }else
               {
                 modifBOTVO.setNombre(atrivo.getNombre());
                 modifBOTVO.setValorInicial("");
                 modifBOTVO.setTipoatributo(atrivo.getTipoatributo());
                 lResultados.add(modifBOTVO);
                 modifBOTVO = null;
               }
             }else
             {
               if(!strSede.equals(""))
               {
                 ResultSet rst = objModificarBOT.Getbeneficioatri(atrivo.getTipodato(),strCodigoBOT,atrivo.getCodatributo());
                 ModificarBOTVO modifBOTVO = new ModificarBOTVO();
                 if(rst.next())
                 {
                   modifBOTVO.setNombre(atrivo.getNombre());
                   modifBOTVO.setValorInicial(rst.getString("valor"));
                   modifBOTVO.setCodigo(new Long(rst.getString("codigo")));
                   modifBOTVO.setTipoatributo(atrivo.getTipoatributo());
                   lResultados.add(modifBOTVO);
                   modifBOTVO = null;
                 }else
                 {
                   modifBOTVO.setNombre(atrivo.getNombre());
                   modifBOTVO.setValorInicial("");
                   modifBOTVO.setTipoatributo(atrivo.getTipoatributo());
                   lResultados.add(modifBOTVO);
                   modifBOTVO = null;
                 }
               }
            }
           }
           session.setAttribute("listaresultados",lResultados);
          //fin del proceso
          
          // Proceso para obtener el valor del beneficio
          String strCostBene = null;
          BeneficioDAO objBeneDAO = new BeneficioDAO(cf);
          strCostBene = objBeneDAO.getCostBOT(strCodigoBOT);
          if(strCostBene != null)
          {
            request.setAttribute("CostBene", strCostBene);
          }
          // Fin del proceso
          // Proceso para obtener la fecha
          String strDate = objBeneDAO.getFechaBOT(strCodigoBOT);
          
          if(strDate == null){
            
            SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
            strDate = dateFormat2.format(c.getTime());
          }

          request.setAttribute("DateBene", strDate);
          // Fin del proceso
          
		//  Proceso para obtener la el tipo beneficio
		String strTypeBot = objBeneDAO.getTipoBeneficio(strCodigoBOT);
			if(strTypeBot != null){
            	request.setAttribute("TipoBene", strTypeBot);
			}
				 // Fin del proceso
         
          String tercero = objBeneDAO.getTercero(strCodigoBOT);
          
          if(tercero != null){
              request.setAttribute("Tercero", tercero);
          }
          cf.closeConnection(objBeneDAO.getConn());
          
          
          }catch(SQLException e){
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSSPE - cwsub ********/");
          }

          return mapping.findForward("success");       
    }
}
